package org.nf.embed.server;

import cn.hutool.core.io.FileUtil;
import cn.hutool.core.util.ClassUtil;
import cn.hutool.setting.yaml.YamlUtil;
import org.nf.embed.WebServer;
import org.nf.embed.config.ConfigEnum;
import org.nf.embed.config.Configure;

import java.io.File;

/**
 * @author wangl
 * @date 2024/4/9
 */
public abstract class AbstractWebServer implements WebServer {

    @Override
    public void run() {
        Configure configure = parseConfig();
        startServer(configure);
    }

    /**
     * 解析yml文件并构建成Configure对象
     */
    private Configure parseConfig() {
        //构建yml文件的绝对路径
        String filePath = ClassUtil.getClassPath() + File.separator + ConfigEnum.CONFIG_FILE.getValue();
        Configure configure;
        if(FileUtil.exist(filePath)) {
            configure = YamlUtil.loadByPath(filePath, Configure.class);
            if(configure == null) {
                configure = new Configure();
            }
        } else {
            configure = new Configure();
        }
        return configure;
    }

    /**
     * 创建并启动web服务器，不同的web服务器的创建和启动方式不一样，
     * 因此由相应的子类去做不同的实现
     * @param configure 配置信息
     */
    protected abstract void startServer(Configure configure);
}